/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.bean.BeanEstado;
import model.bean.BeanPrivilegio;
import model.bean.BeanUsuario;
import model.daobase.DBase;

/**
 *
 * @author alulab
 */
public class DaoModerador extends DBase{
    
        public ArrayList<BeanUsuario> getModeradorList() {
        ArrayList<BeanUsuario> ModeradorList = new ArrayList<BeanUsuario>();
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanUsuario usuario = null;

        try {

            String query = "select * FROM usuario u INNER JOIN privilegio p ON p.idprivilegio=u.idprivilegio"
                    + " INNER JOIN estado e ON u.idestado=e.idestado WHERE u.idprivilegio=1";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                usuario = new BeanUsuario();
                usuario.setIdusuario(res.getInt("idusuario"));
                usuario.setNombre(res.getString("nombre"));
                usuario.setApellido(res.getString("apellido"));
                usuario.setAlias(res.getString("alias"));
                usuario.setCorreo(res.getString("correo"));
                usuario.setFecha_registro(res.getDate("fecha_registro"));
                BeanPrivilegio privilegio = new BeanPrivilegio();
                privilegio.setIdprivilegio(res.getInt("idprivilegio"));
                privilegio.setNombre_privilegio(res.getString("nombre_privilegio"));
                usuario.setPrivilegio(privilegio);
                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                usuario.setEstado(estado);
                usuario.setFecha_cambio_estado(res.getDate("fecha_cambio_estado"));

                ModeradorList.add(usuario);
            }



            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return ModeradorList;

    }
            
    public ArrayList<BeanUsuario> getByString(String cadena,String fecha_registro1,String fecha_registro2){
        ArrayList<BeanUsuario> userList=new ArrayList<BeanUsuario>();
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanUsuario usuario = null;
        

        try {
            if(cadena!=null && fecha_registro1!=null && fecha_registro2!=null){
            String temporal="%"+cadena+"%";
            String query = "select * FROM usuario u INNER JOIN privilegio p ON p.idprivilegio=u.idprivilegio"
                    + " INNER JOIN estado e ON u.idestado=e.idestado WHERE u.idprivilegio=1 AND (u.idestado=0 OR u.idestado=1) AND"
                    + " (u.nombre LIKE ? OR u.apellido LIKE ? OR u.alias LIKE ? OR (fecha_registro>=str_to_date(?,'%Y,%m,%d') AND fecha_registro<=str_to_date(?,'%Y,%m,%d')))";

            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, temporal);
            pstmt.setString(2, temporal);
            pstmt.setString(3, temporal);
            pstmt.setString(4,fecha_registro1);
            pstmt.setString(5,fecha_registro2);
            }
            else if(cadena==null && fecha_registro1!=null && fecha_registro2!=null){
                 String query = "select * FROM usuario u INNER JOIN privilegio p ON p.idprivilegio=u.idprivilegio"
                    + " INNER JOIN estado e ON u.idestado=e.idestado WHERE u.idprivilegio=0 AND (u.idestado=0 OR u.idestado=1) AND"
                    + " (fecha_registro>=str_to_date(?,'%Y,%m,%d') AND fecha_registro<=str_to_date(?,'%Y,%m,%d'))";
                 pstmt = conn.prepareStatement(query);
                 pstmt.setString(1,fecha_registro1);
            pstmt.setString(2,fecha_registro2);
                 
           }
            else if(cadena!=null && fecha_registro1==null && fecha_registro2==null){
                String temporal="%"+cadena+"%";
                String query= "select * FROM usuario u INNER JOIN privilegio p ON p.idprivilegio=u.idprivilegio"
                    + " INNER JOIN estado e ON u.idestado=e.idestado WHERE u.idprivilegio=0 AND (u.idestado=0 OR u.idestado=1) AND"
                    + " (u.nombre LIKE ? OR u.apellido LIKE ? OR u.alias LIKE ?)";
                pstmt = conn.prepareStatement(query);
            pstmt.setString(1, temporal);
            pstmt.setString(2, temporal);
            pstmt.setString(3, temporal);
            }
           
            
            res = pstmt.executeQuery();
            while (res.next()) {
                usuario = new BeanUsuario();
                usuario.setIdusuario(res.getInt("idusuario"));
                usuario.setNombre(res.getString("nombre"));
                usuario.setApellido(res.getString("apellido"));
                usuario.setAlias(res.getString("alias"));
                usuario.setCorreo(res.getString("correo"));
                usuario.setFecha_registro(res.getDate("fecha_registro"));
                BeanPrivilegio privilegio = new BeanPrivilegio();
                privilegio.setIdprivilegio(res.getInt("idprivilegio"));
                privilegio.setNombre_privilegio(res.getString("nombre_privilegio"));
                usuario.setPrivilegio(privilegio);
                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                usuario.setEstado(estado);
                usuario.setFecha_cambio_estado(res.getDate("fecha_cambio_estado"));

                userList.add(usuario);
            }



            res.close();
            pstmt.close();
            conn.close();
           
        } catch (SQLException e1) {
            e1.getMessage();
        }

        
        return userList;
        
    }
    
        
        public void back_to_user(Integer idusuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "UPDATE usuario SET idprivilegio=0 WHERE idusuario=" + idusuario;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
}
